#include <iostream>
#include <vector>
#include <format>
using namespace std;
struct Info {
  int n;
  char F, A, T;
  int step; // 记录之前执行到哪，汉诺塔比较简单，复杂的递归需要把过程中所有中间变量都记录下来
};
void hanoi(int n, char F, char A, char T) {
  if (n == 1) {
    cout << format("move {} from {} to {}", n, F, T) << endl;
    return;
  }
  hanoi(n - 1, F, T, A);
  cout << format("move {} from {} to {}", n, F, T) << endl;
  hanoi(n - 1, A, F, T);
}
int main() {
  int n = 4;
  // hanoi(n, 'F', 'A', 'T');
  vector<Info> stack;
  stack.emplace_back(n, 'F', 'A', 'T', 0);
  while (!stack.empty()) {
    auto& [n, F, A, T, step] = stack.back();
    if (n == 1) {
      cout << format("move {} from {} to {}", n, F, T) << endl; // 对应 12 行
      stack.pop_back(); // 出栈，对应 13 行
      continue;
    }
    if (step == 0) {
      ++step; // 记录上次执行到 15 行，方便下次恢复现场
      stack.emplace_back(n - 1, F, T, A, 0); // 入栈，对应 15 行
    } else if (step == 1) {
      ++step; // 直接从 16 行开始执行
      cout << format("move {} from {} to {}", n, F, T) << endl; // 对应 16 行
      stack.emplace_back(n - 1, A, F, T, 0); // 入栈，对应 17 行
    } else { // 直接从 18 行开始执行
      stack.pop_back(); // 对应函数结束的默认 return
    }
  }
}